#include <stdio.h>
#include <stdlib.h>

#define N 10

void Traversal(int *, int, void(*)(int *));
void selectSort(int *, int, int(*)(int, int));
void Input(int *);
void Output(int *);
void Swap(int *, int *);
int Greater(int, int);
int Lesser(int, int);

int main(void)
{
    int iArray[N];

    freopen("data.txt", "r", stdin);
    Traversal(iArray, N, Input);
    freopen("CON", "r", stdin);

    // ascending
    selectSort(iArray, N, Greater);
    Traversal(iArray, N, Output);
    printf("\n");

    // descending
    selectSort(iArray, N, Lesser);
    Traversal(iArray, N, Output);
    printf("\n");

    return 0;
}

void Input(int *pData)
{
    scanf("%d", pData);
}

void Output(int *pData)
{
    printf("%d ", *pData);
}

void Swap(int *x, int *y)
{
    int temp;

    temp = *x;
    *x = *y;
    *y = temp;
}

int Greater(int a, int b)
{
    return (a > b) ? 1 : 0;
}

int Lesser(int a, int b)
{
    return (a < b) ? 1 : 0;
}

void selectSort(int *pa, int n, int(*pf)(int, int))
{
    int i, j;
    int pos = 0;
    
    for (i = 0; i < n - 1; i ++)
    {
        pos = i;
        for (j = i + 1; j < n; j ++)
        {
            if (pf(pa[pos], pa[j]))
            {
                pos = j;
            }
        }

        if (pos != j)
        {
            Swap(pa + i, pa + pos);
        }
    }
}

void Traversal(int *pa, int n, void (*pf)(int *))
{
    int *p;

    for (p = pa; p < pa + n; p ++)
    {
        pf(p);
    }
}

